<?php
declare (strict_types = 1);
/**
 * 总编室编单播出时间计算类
 */
namespace app\common\model;

class PlayTime extends BaseModel
{

    // 编单播出时间计算方法
    public function computedPlayTime($list, $index)
    {
      $p_time = 0;
      $nowPgm = $list[$index];

      if ($nowPgm['play_mode'] == 3) { // 插播
       
        $p_time = self::insertPlay($list, $nowPgm['ins_mode'], $index, $nowPgm['s_time']);  // 计算插播节目的播出时间

      } else if ($nowPgm['play_mode'] ==0) { // 定时
        
        $p_time = $nowPgm['s_time'];

      } else if (in_array($nowPgm['play_mode'], [1,2])) { // 顺序 ,触发

        $p_time = self::sortPlay($index, 0);
      }

      return $p_time;
    }

    // 顺序，触发播放时间计算
    public function sortPlay($list, $index, $sum = 0)
    {
      if ($index < 0) {return $sum;}
      $index--;
      $lastPgm = $list[$index];

      if ($index < 0) { // 第一条节目
        return $list[0]['s_time'];
      } else {
        if (in_array($lastPgm['play_mode'], [0, 1, 2]) || $index == 0) {
          $sum += $lastPgm['s_time'] + $lastPgm['pgm_len'];
          return $sum;
        } else { // 插播
          $sum += $lastPgm['pgm_len'];
          return self::sortPlay($list,$index, $sum);
        }
      }
    }

    public function insertPlay($list, $ins, $index, $sum = 0)
    {
      if ($index < 0) {
        return $sum;
      }
      $index--;

      if ($ins == 0) { // 相对
        if ($index < 0) { // 第一条节目了
          return $list[0]['s_time'];
        } else if ($index == 0) {
          $lastPgm = $list[0];
          return $sum + (in_array($lastPgm['play_mode'], [0, 1, 2]) ? $lastPgm['s_time'] : $lastPgm['s_time'] + $lastPgm['pgm_len']);
        } else {
          $lastPgm = $list[$index];
          if (in_array($lastPgm['play_mode'], [0, 1, 2])) {            
            return $sum += $lastPgm['s_time'];
          } else { // 插播
            $sum += $lastPgm['pgm_len'];
            return self::insertPlay($list, $ins, $index, $sum);
          }
        }
      } else if (in_array($ins, [1, 3])) { // 绝对, 手插
        return $list[$index + 1]['s_time'];
      } else if ($ins == 2) { // 跟插
        if ($index < 0) {
          return $list[0]['s_time'];
        } else {
          $lastPgm = $list[$index];
          if (in_array($lastPgm['play_mode'], [0, 1, 2])) {            
            return $sum += $lastPgm['s_time'];
          } else { // 插播
            return $lastPgm['s_time_play'] + $lastPgm['pgm_len'];
          }
        }
      }
    }
}
